{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install pandas\n",
    "# !pip install scikit-learn"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Load Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19",
    "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5",
    "tags": []
   },
   "outputs": [],
   "source": [
    "import numpy as np # linear algebra\n",
    "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n",
    "from sklearn.utils import resample\n",
    "from sklearn import preprocessing\n",
    "\n",
    "import os\n",
    "dataset_path = []\n",
    "\n",
    "for dirname, _, filenames in os.walk('./data/'):\n",
    "    for filename in filenames:\n",
    "        if filename.endswith('.csv'):\n",
    "            dfp = os.path.join(dirname, filename)\n",
    "            dataset_path.append(dfp)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "17\n"
     ]
    }
   ],
   "source": [
    "print(len(dataset_path))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# mult = 5\n",
    "cols = list(pd.read_csv(dataset_path[1], nrows=1))\n",
    "\n",
    "def load_file(path):\n",
    "    # data = pd.read_csv(path, sep=',')\n",
    "    data = pd.read_csv(path,\n",
    "                   usecols =[i for i in cols if i != \" Source IP\" \n",
    "                             and i != ' Destination IP' and i != 'Flow ID' \n",
    "                             and i != 'SimillarHTTP' and i != 'Unnamed: 0'])\n",
    "\n",
    "    return data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "samples = pd.concat([load_file(dfp) for dfp in dataset_path], ignore_index=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Count the occurrences of each label\n",
    "label_counts = samples[' Label'].value_counts()\n",
    "\n",
    "# Create a bar plot to visualize the label counts\n",
    "plt.figure(figsize=(10, 6))\n",
    "label_counts.plot(kind='bar')\n",
    "plt.title('Comparison of Label Column')\n",
    "plt.xlabel('Label')\n",
    "plt.ylabel('Count')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Source Port</th>\n",
       "      <th>Destination Port</th>\n",
       "      <th>Protocol</th>\n",
       "      <th>Timestamp</th>\n",
       "      <th>Flow Duration</th>\n",
       "      <th>Total Fwd Packets</th>\n",
       "      <th>Total Backward Packets</th>\n",
       "      <th>Total Length of Fwd Packets</th>\n",
       "      <th>Total Length of Bwd Packets</th>\n",
       "      <th>Fwd Packet Length Max</th>\n",
       "      <th>...</th>\n",
       "      <th>Active Mean</th>\n",
       "      <th>Active Std</th>\n",
       "      <th>Active Max</th>\n",
       "      <th>Active Min</th>\n",
       "      <th>Idle Mean</th>\n",
       "      <th>Idle Std</th>\n",
       "      <th>Idle Max</th>\n",
       "      <th>Idle Min</th>\n",
       "      <th>Inbound</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>910</td>\n",
       "      <td>20073</td>\n",
       "      <td>17</td>\n",
       "      <td>2018-12-01 11:09:58.622545</td>\n",
       "      <td>48</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2944.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1472.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>DrDoS_DNS</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>588</td>\n",
       "      <td>39159</td>\n",
       "      <td>17</td>\n",
       "      <td>2018-12-01 11:10:43.911581</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2944.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1472.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>DrDoS_DNS</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>953</td>\n",
       "      <td>22161</td>\n",
       "      <td>17</td>\n",
       "      <td>2018-12-01 11:08:16.500655</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2944.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1472.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>DrDoS_DNS</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>663</td>\n",
       "      <td>18811</td>\n",
       "      <td>17</td>\n",
       "      <td>2018-12-01 11:11:00.683438</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2944.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1472.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>DrDoS_DNS</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>591</td>\n",
       "      <td>4168</td>\n",
       "      <td>17</td>\n",
       "      <td>2018-12-01 11:11:08.136206</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2896.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1448.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>DrDoS_DNS</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1130645</th>\n",
       "      <td>80</td>\n",
       "      <td>46280</td>\n",
       "      <td>6</td>\n",
       "      <td>2018-11-03 11:30:16.186036</td>\n",
       "      <td>53</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>BENIGN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1130646</th>\n",
       "      <td>80</td>\n",
       "      <td>46282</td>\n",
       "      <td>6</td>\n",
       "      <td>2018-11-03 11:30:16.186163</td>\n",
       "      <td>66</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>BENIGN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1130647</th>\n",
       "      <td>51233</td>\n",
       "      <td>123</td>\n",
       "      <td>17</td>\n",
       "      <td>2018-11-03 11:30:16.402521</td>\n",
       "      <td>26288</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>96.0</td>\n",
       "      <td>96.0</td>\n",
       "      <td>48.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>BENIGN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1130648</th>\n",
       "      <td>52968</td>\n",
       "      <td>80</td>\n",
       "      <td>6</td>\n",
       "      <td>2018-11-03 11:30:17.145199</td>\n",
       "      <td>30679</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>BENIGN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1130649</th>\n",
       "      <td>80</td>\n",
       "      <td>52968</td>\n",
       "      <td>6</td>\n",
       "      <td>2018-11-03 11:30:17.175879</td>\n",
       "      <td>67</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>BENIGN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1130650 rows × 83 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          Source Port   Destination Port   Protocol  \\\n",
       "0                 910              20073         17   \n",
       "1                 588              39159         17   \n",
       "2                 953              22161         17   \n",
       "3                 663              18811         17   \n",
       "4                 591               4168         17   \n",
       "...               ...                ...        ...   \n",
       "1130645            80              46280          6   \n",
       "1130646            80              46282          6   \n",
       "1130647         51233                123         17   \n",
       "1130648         52968                 80          6   \n",
       "1130649            80              52968          6   \n",
       "\n",
       "                          Timestamp   Flow Duration   Total Fwd Packets  \\\n",
       "0        2018-12-01 11:09:58.622545              48                   2   \n",
       "1        2018-12-01 11:10:43.911581               2                   2   \n",
       "2        2018-12-01 11:08:16.500655               1                   2   \n",
       "3        2018-12-01 11:11:00.683438               1                   2   \n",
       "4        2018-12-01 11:11:08.136206               1                   2   \n",
       "...                             ...             ...                 ...   \n",
       "1130645  2018-11-03 11:30:16.186036              53                   1   \n",
       "1130646  2018-11-03 11:30:16.186163              66                   1   \n",
       "1130647  2018-11-03 11:30:16.402521           26288                   2   \n",
       "1130648  2018-11-03 11:30:17.145199           30679                   1   \n",
       "1130649  2018-11-03 11:30:17.175879              67                   1   \n",
       "\n",
       "          Total Backward Packets  Total Length of Fwd Packets  \\\n",
       "0                              0                       2944.0   \n",
       "1                              0                       2944.0   \n",
       "2                              0                       2944.0   \n",
       "3                              0                       2944.0   \n",
       "4                              0                       2896.0   \n",
       "...                          ...                          ...   \n",
       "1130645                        2                          0.0   \n",
       "1130646                        2                          0.0   \n",
       "1130647                        2                         96.0   \n",
       "1130648                        1                          0.0   \n",
       "1130649                        2                          0.0   \n",
       "\n",
       "          Total Length of Bwd Packets   Fwd Packet Length Max  ...  \\\n",
       "0                                 0.0                  1472.0  ...   \n",
       "1                                 0.0                  1472.0  ...   \n",
       "2                                 0.0                  1472.0  ...   \n",
       "3                                 0.0                  1472.0  ...   \n",
       "4                                 0.0                  1448.0  ...   \n",
       "...                               ...                     ...  ...   \n",
       "1130645                           0.0                     0.0  ...   \n",
       "1130646                           0.0                     0.0  ...   \n",
       "1130647                          96.0                    48.0  ...   \n",
       "1130648                           0.0                     0.0  ...   \n",
       "1130649                           0.0                     0.0  ...   \n",
       "\n",
       "         Active Mean   Active Std   Active Max   Active Min  Idle Mean  \\\n",
       "0                0.0          0.0          0.0          0.0        0.0   \n",
       "1                0.0          0.0          0.0          0.0        0.0   \n",
       "2                0.0          0.0          0.0          0.0        0.0   \n",
       "3                0.0          0.0          0.0          0.0        0.0   \n",
       "4                0.0          0.0          0.0          0.0        0.0   \n",
       "...              ...          ...          ...          ...        ...   \n",
       "1130645          0.0          0.0          0.0          0.0        0.0   \n",
       "1130646          0.0          0.0          0.0          0.0        0.0   \n",
       "1130647          0.0          0.0          0.0          0.0        0.0   \n",
       "1130648          0.0          0.0          0.0          0.0        0.0   \n",
       "1130649          0.0          0.0          0.0          0.0        0.0   \n",
       "\n",
       "          Idle Std   Idle Max   Idle Min   Inbound      Label  \n",
       "0              0.0        0.0        0.0         1  DrDoS_DNS  \n",
       "1              0.0        0.0        0.0         1  DrDoS_DNS  \n",
       "2              0.0        0.0        0.0         1  DrDoS_DNS  \n",
       "3              0.0        0.0        0.0         1  DrDoS_DNS  \n",
       "4              0.0        0.0        0.0         1  DrDoS_DNS  \n",
       "...            ...        ...        ...       ...        ...  \n",
       "1130645        0.0        0.0        0.0         1     BENIGN  \n",
       "1130646        0.0        0.0        0.0         1     BENIGN  \n",
       "1130647        0.0        0.0        0.0         0     BENIGN  \n",
       "1130648        0.0        0.0        0.0         0     BENIGN  \n",
       "1130649        0.0        0.0        0.0         1     BENIGN  \n",
       "\n",
       "[1130650 rows x 83 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "samples"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据已按类别分割并保存到文件中。\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# 根据 'Label' 列分组数据\n",
    "grouped = samples.groupby(' Label')\n",
    "\n",
    "# 创建存储分割文件的目录\n",
    "output_dir = 'class_split'\n",
    "if not os.path.exists(output_dir):\n",
    "    os.makedirs(output_dir)\n",
    "\n",
    "# 为每个类别保存一个CSV文件\n",
    "for label, group in grouped:\n",
    "    filename = os.path.join(output_dir, f\"{label}.csv\")\n",
    "    group.to_csv(filename, index=False)\n",
    "\n",
    "print(\"数据已按类别分割并保存到文件中。\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
